package com.yonyou.iuap.shell.service.impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.yonyou.iuap.shell.dao.KmFavoriteEntityDao;
import com.yonyou.iuap.shell.entity.KmFavoriteEntity;
import com.yonyou.iuap.shell.entity.exp.AttachementPoJo;
import com.yonyou.iuap.shell.entity.exp.FavoriteCountPojo;
import com.yonyou.iuap.shell.entity.exp.FavoritePojo;
import com.yonyou.iuap.shell.pub.IShellDaoEnum;
import com.yonyou.iuap.shell.pub.IShellServiceEnum;
import com.yonyou.iuap.shell.pub.ResultDto;
import com.yonyou.iuap.shell.service.intf.IKmFavoriteService;

@Service(IShellServiceEnum.Shell_Service_Favorite)
public class KmFavoriteServiceImpl implements IKmFavoriteService{

	@Autowired
	@Qualifier(IShellDaoEnum.Shell_Dao_Favorite)
	private KmFavoriteEntityDao<KmFavoriteEntity> kmFavoriteEntityDao;

	public ResultDto deleteByPrimaryKey(String paramString) {
		// TODO 自动生成的方法存根
		ResultDto rsDto = new ResultDto();
		if(StringUtils.isEmpty(paramString)){
			rsDto.setStatus(1);
			rsDto.setMessage("删除条件不能为空!");
		}
		int i = kmFavoriteEntityDao.deleteByPrimaryKey(paramString);
		if(i==0){
			rsDto.setStatus(1);
			rsDto.setMessage("删除失败!");
		}else{
			rsDto.setStatus(0);
			rsDto.setMessage("删除成功!");
		}
		return rsDto;
	}

	public ResultDto insert(KmFavoriteEntity paramT) {
		// TODO 自动生成的方法存根
		ResultDto rsDto = new ResultDto();
		//判断是否已经收藏过
		String where = "pk_publish='"+paramT.getPk_publish()+"' and favorite_user='"+paramT.getFavorite_user()+"'";
		int count = kmFavoriteEntityDao.countByCondition(where);
		if(count>0){
			rsDto.setStatus(1);
			rsDto.setMessage("该用户已经收藏了该知识点!");
		}else{
			int i = kmFavoriteEntityDao.insertSelective(paramT);
			if(i==0){
				rsDto.setStatus(1);
				rsDto.setMessage("新增失败!");
			}else{
				rsDto.setStatus(0);
				rsDto.setMessage("新增成功!");
			}
		}
		
		return rsDto;
	}

	public ResultDto selectByPrimaryKey(String paramString) {
		// TODO 自动生成的方法存根
		ResultDto rsDto = new ResultDto();
		if(StringUtils.isEmpty(paramString)){
			rsDto.setStatus(1);
			rsDto.setMessage("查询条件不能为空!");
		}else{
			KmFavoriteEntity kmFavoriteEntity = kmFavoriteEntityDao.selectByPrimaryKey(paramString);
			rsDto.setStatus(0);
			rsDto.setMessage("查询成功!");
			rsDto.setData(kmFavoriteEntity);
		}
		return rsDto;
	}

	public ResultDto selectAll() {
		// TODO 自动生成的方法存根
		ResultDto rsDto = new ResultDto();
		List<KmFavoriteEntity> listvo = kmFavoriteEntityDao.selectAll();
		rsDto.setStatus(0);
		rsDto.setMessage("数据查询成功!");
		rsDto.setNum(listvo==null?0:listvo.size());
		rsDto.setCount(listvo==null?0:listvo.size());
		rsDto.setData(listvo);
		return rsDto;
	}

	public ResultDto updateByPrimaryKey(KmFavoriteEntity paramT) {
		// TODO 自动生成的方法存根
		ResultDto rsDto = new ResultDto();
		int i = kmFavoriteEntityDao.updateByPrimaryKey(paramT);
		if(i==0){
			rsDto.setStatus(1);
			rsDto.setMessage("修改失败!");
		}else{
			rsDto.setStatus(1);
			rsDto.setMessage("修改成功!");
		}
		return rsDto;
	}

	public ResultDto selectByCondition(String paramString) {
		// TODO 自动生成的方法存根
		ResultDto rsDto = new ResultDto();
		if(StringUtils.isEmpty(paramString)){
			rsDto.setStatus(1);
			rsDto.setMessage("查询条件不能为空!");
		}else{
			List<KmFavoriteEntity> listvo = kmFavoriteEntityDao.selectByCondition(paramString);
			rsDto.setStatus(0);
			rsDto.setMessage("数据查询成功!");
			rsDto.setNum(listvo==null?0:listvo.size());
			rsDto.setCount(listvo==null?0:listvo.size());
			rsDto.setData(listvo);
		}
		return rsDto;
	}

	public ResultDto countByCondition(String paramString) {
		// TODO 自动生成的方法存根
		ResultDto rsDto = new ResultDto();
		int i = kmFavoriteEntityDao.countByCondition(paramString);
		if(i==0){
			rsDto.setStatus(1);
			rsDto.setMessage("查询失败!");
		}else{
			rsDto.setStatus(1);
			rsDto.setMessage("查询成功!");
		}
		return rsDto;
	}

	public ResultDto deleteByCondition(String paramString) {
		// TODO 自动生成的方法存根
		ResultDto rsDto = new ResultDto();
		if(StringUtils.isEmpty(paramString)){
			rsDto.setStatus(1);
			rsDto.setMessage("删除条件不能为空!");
		}
		int i = kmFavoriteEntityDao.deleteByCondition(paramString);
		if(i==0){
			rsDto.setStatus(1);
			rsDto.setMessage("删除失败!");
		}else{
			rsDto.setStatus(0);
			rsDto.setMessage("删除成功!");
		}
		return rsDto;
	}

	public ResultDto insertSelective(KmFavoriteEntity paramT) {
		ResultDto rsDto = new ResultDto();
		int i = kmFavoriteEntityDao.insertSelective(paramT);
		if(i==0){
			rsDto.setStatus(1);
			rsDto.setMessage("新增失败!");
		}else{
			rsDto.setStatus(0);
			rsDto.setMessage("新增成功!");
		}
		return rsDto;
	}

	public ResultDto updateByPrimaryKeySelective(KmFavoriteEntity paramT) {
		// TODO 自动生成的方法存根
		ResultDto rsDto = new ResultDto();
		int i = kmFavoriteEntityDao.updateByPrimaryKeySelective(paramT);
		if(i==0){
			rsDto.setStatus(1);
			rsDto.setMessage("修改失败!");
		}else{
			rsDto.setStatus(1);
			rsDto.setMessage("修改成功!");
		}
		return rsDto;
	}

	public ResultDto Selectfavorite(Map<String, Object> map) {
		ResultDto rsDto = new ResultDto();
			if(StringUtils.isEmpty(map.get("publish_key").toString())){
				map.put("publish_key", " 1=1");
			}
			if(map.get("pageNum")!=null && map.get("pageSize")!=null){
				int pageNum=Integer.valueOf(map.get("pageNum").toString());
				int pageSize=Integer.valueOf(map.get("pageSize").toString());
				if(pageNum == 0)
					pageNum++;
				if(pageSize == 0)
					pageSize=15;
				pageNum=(pageNum-1) * pageSize;
				map.put("pageNum", pageNum);
				map.put("pageSize", pageSize);
			}
			List<FavoritePojo> listvo = kmFavoriteEntityDao.Selectfavoritepk(map);
			rsDto.setStatus(0);
			rsDto.setMessage("数据查询成功!");
			rsDto.setNum(listvo==null?0:listvo.size());
			rsDto.setCount(kmFavoriteEntityDao.getfavoriteLikeCount(map));
			rsDto.setData(listvo);
		return rsDto;
	}

	public List<FavoritePojo> Countfavoritepk() {
		// TODO 自动生成的方法存根
		List<FavoritePojo> pojoList=	kmFavoriteEntityDao.Countfavoritepk();
		return pojoList;
	}

	public ResultDto favoritecount(String strs) {
		// TODO 自动生成的方法存根
		 ResultDto rsDto = new ResultDto();
		List<FavoriteCountPojo> list = kmFavoriteEntityDao.favoritecount(strs);
		if(list.size()==0){
			rsDto.setData(list);
			rsDto.setMessage("数据查询成功!");
		}else{
			StringBuffer str=new StringBuffer();
			  int tag=0;
			for(int i=0;i<list.size();i++){
				FavoriteCountPojo FavoriteCountPojo = list.get(i);
				str.append(FavoriteCountPojo.getPublish_key()).append(",");
			}
		
			String [] arry =str.substring(0, str.length()-1).split(",");
		    Map<String,Integer> map = new HashMap<String, Integer>();  
		    for(int i =0 ;i<arry.length;i++){  
		        if(null!= map.get(arry[i])){  
		            map.put(arry[i], map.get(arry[i])+1); //value+1  
		        }else{  
		            map.put(arry[i],1);  
		        }  
		    }  
		    
		    ArrayList<Entry<String, Integer>> arrayList = new ArrayList<Entry<String, Integer>>(  
		    		map.entrySet());  
		  //排序  
		    Collections.sort(arrayList, new Comparator<Map.Entry<String, Integer>>() {  
		        public int compare(Map.Entry<String, Integer> map1,  
		                    Map.Entry<String, Integer> map2) {  
		            return (map2.getValue() - map1.getValue());  
		        }  
		    });  
		    rsDto.setData(arrayList);
		    rsDto.setMessage("数据查询成功!");
		}
		
		return rsDto;
	}



	public ResultDto queryfavoriteuser(Map<String,Object> map) {
		// TODO 自动生成的方法存根
		ResultDto rsDto = new ResultDto();
		
		if(StringUtils.isEmpty(map)){
			rsDto.setStatus(1);
			rsDto.setMessage("查询条件不能为空!");
		}else{
			if(map.get("pageNum")!=null && map.get("pageSize")!=null){
				int pageNum=Integer.valueOf(map.get("pageNum").toString());
				int pageSize=Integer.valueOf(map.get("pageSize").toString());
				if(pageNum == 0)
					pageNum++;
				if(pageSize == 0)
					pageSize=15;
				pageNum=(pageNum-1) * pageSize;
				map.put("pageNum", pageNum);
				map.put("pageSize", pageSize);
			}
			List<FavoritePojo> listvo = kmFavoriteEntityDao.queryfavoriteuser(map);
			rsDto.setStatus(0);
			rsDto.setMessage("数据查询成功!");
			//System.out.println("-----------------------------"+listvo.size());
			rsDto.setNum(listvo==null?0:listvo.size());
			rsDto.setCount(kmFavoriteEntityDao.getfavoriteuserCount(map));
			rsDto.setData(listvo);
		}
		return rsDto;
	}
	
}
